﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using NIEN_LUAN.Db;
using System.Windows.Forms;

namespace NIEN_LUAN
{
    public partial class FormTimKiemMatHang : Form
    {
        private DataContentDataContext db = new DataContentDataContext();       

        public FormTimKiemMatHang()
        {
            InitializeComponent();
        }
        
        private void btnTimMH_Click(object sender, EventArgs e)
        {
            if (this.checkBoxTenhang.Checked && this.checkBoxLoaihang.Checked && this.checkBoxSoluong.Checked && this.checkBoxGiaBan.Checked)
            {
                if (string.IsNullOrEmpty(this.txtTenHang.Text))                
                {
                    MessageBox.Show("Chưa nhập tên hàng", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                if (this.numericUDSL.Value <= 0)
                {
                    MessageBox.Show("Số lượng hàng chưa chọn", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                if (this.numericUD1.Value <= 0 && this.numericUD2.Value <= 0)
                {
                    MessageBox.Show("Bạn chưa chọn đơn giá hàng", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                if (string.IsNullOrEmpty(this.comboBoxLH.Text))
                {
                    MessageBox.Show("Bạn chưa chọn loại hàng", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                var mathang = (from m in db.MATHANGs
                               where ((m.TenHang.StartsWith(this.txtTenHang.Text))&&(m.MaLoaiHang==this.comboBoxLH.Text) && (m.GiaBan.Value>=this.numericUD1.Value 
                               && m.GiaBan.Value<=this.numericUD2.Value) && m.SoLuongHienCo.Value<=this.numericUDSL.Value)
                               select m).ToList();
                this.mATHANGBindingSource.DataSource = mathang;
                this.mATHANGBindingSource.ResetBindings(true);
                return;
            }

            if (!this.checkBoxTenhang.Checked && this.checkBoxLoaihang.Checked && this.checkBoxSoluong.Checked && this.checkBoxGiaBan.Checked)
            {               

                if (this.numericUDSL.Value <= 0)
                {
                    MessageBox.Show("Số lượng hàng chưa chọn", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                if (this.numericUD1.Value <= 0 && this.numericUD2.Value <= 0)
                {
                    MessageBox.Show("Bạn chưa chọn đơn giá hàng", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                if (string.IsNullOrEmpty(this.comboBoxLH.Text))
                {
                    MessageBox.Show("Bạn chưa chọn loại hàng", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                var mathang = (from m in db.MATHANGs
                               where ((m.MaLoaiHang == this.comboBoxLH.Text) && (m.GiaBan.Value >= this.numericUD1.Value
                               && m.GiaBan.Value <= this.numericUD2.Value) && m.SoLuongHienCo.Value <= this.numericUDSL.Value)
                               select m).ToList();
                this.mATHANGBindingSource.DataSource = mathang;
                this.mATHANGBindingSource.ResetBindings(true);
                return;
            }

            if (this.checkBoxTenhang.Checked && !this.checkBoxLoaihang.Checked && this.checkBoxSoluong.Checked && this.checkBoxGiaBan.Checked)
            {
                if (string.IsNullOrEmpty(this.txtTenHang.Text))
                {
                    MessageBox.Show("Chưa nhập tên hàng", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                if (this.numericUDSL.Value <= 0)
                {
                    MessageBox.Show("Số lượng hàng chưa chọn", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                if (this.numericUD1.Value <= 0 && this.numericUD2.Value <= 0)
                {
                    MessageBox.Show("Bạn chưa chọn đơn giá hàng", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
               
                var mathang = (from m in db.MATHANGs
                               where ((m.TenHang.StartsWith(this.txtTenHang.Text)) && (m.GiaBan.Value >= this.numericUD1.Value
                               && m.GiaBan.Value <= this.numericUD2.Value) && m.SoLuongHienCo.Value <= this.numericUDSL.Value)
                               select m).ToList();
                this.mATHANGBindingSource.DataSource = mathang;
                this.mATHANGBindingSource.ResetBindings(true);
                return;
            }

            if (this.checkBoxTenhang.Checked && this.checkBoxLoaihang.Checked && !this.checkBoxSoluong.Checked && this.checkBoxGiaBan.Checked)
            {
                if (string.IsNullOrEmpty(this.txtTenHang.Text))
                {
                    MessageBox.Show("Chưa nhập tên hàng", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                if (this.numericUD1.Value <= 0 && this.numericUD2.Value <= 0)
                {
                    MessageBox.Show("Bạn chưa chọn đơn giá hàng", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                if (string.IsNullOrEmpty(this.comboBoxLH.Text))
                {
                    MessageBox.Show("Bạn chưa chọn loại hàng", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                var mathang = (from m in db.MATHANGs
                               where ((m.TenHang.StartsWith(this.txtTenHang.Text)) && (m.MaLoaiHang == this.comboBoxLH.Text) && (m.GiaBan.Value >= this.numericUD1.Value
                               && m.GiaBan.Value <= this.numericUD2.Value))
                               select m).ToList();
                this.mATHANGBindingSource.DataSource = mathang;
                this.mATHANGBindingSource.ResetBindings(true);
                return;
            }

            if (this.checkBoxTenhang.Checked && this.checkBoxLoaihang.Checked && this.checkBoxSoluong.Checked && !this.checkBoxGiaBan.Checked)
            {
                if (string.IsNullOrEmpty(this.txtTenHang.Text))
                {
                    MessageBox.Show("Chưa nhập tên hàng", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                if (this.numericUDSL.Value <= 0)
                {
                    MessageBox.Show("Số lượng hàng chưa chọn", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                if (string.IsNullOrEmpty(this.comboBoxLH.Text))
                {
                    MessageBox.Show("Bạn chưa chọn loại hàng", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                var mathang = (from m in db.MATHANGs
                               where ((m.TenHang.StartsWith(this.txtTenHang.Text)) && (m.MaLoaiHang == this.comboBoxLH.Text) && m.SoLuongHienCo.Value <= this.numericUDSL.Value)
                               select m).ToList();
                this.mATHANGBindingSource.DataSource = mathang;
                this.mATHANGBindingSource.ResetBindings(true);
                return;
            }

            if (!this.checkBoxTenhang.Checked && !this.checkBoxLoaihang.Checked && this.checkBoxSoluong.Checked && this.checkBoxGiaBan.Checked)
            {                
                if (this.numericUDSL.Value <= 0)
                {
                    MessageBox.Show("Số lượng hàng chưa chọn", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                if (this.numericUD1.Value <= 0 && this.numericUD2.Value <= 0)
                {
                    MessageBox.Show("Bạn chưa chọn đơn giá hàng", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                var mathang = (from m in db.MATHANGs
                               where ((m.GiaBan.Value >= this.numericUD1.Value && m.GiaBan.Value <= this.numericUD2.Value) && m.SoLuongHienCo.Value <= this.numericUDSL.Value)
                               select m).ToList();
                this.mATHANGBindingSource.DataSource = mathang;
                this.mATHANGBindingSource.ResetBindings(true);
                return;
            }

            if (!this.checkBoxTenhang.Checked && this.checkBoxLoaihang.Checked && !this.checkBoxSoluong.Checked && this.checkBoxGiaBan.Checked)
            {
                if (this.numericUD1.Value <= 0 && this.numericUD2.Value <= 0)
                {
                    MessageBox.Show("Bạn chưa chọn đơn giá hàng", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                if (string.IsNullOrEmpty(this.comboBoxLH.Text))
                {
                    MessageBox.Show("Bạn chưa chọn loại hàng", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                var mathang = (from m in db.MATHANGs
                               where ((m.MaLoaiHang == this.comboBoxLH.Text) && (m.GiaBan.Value >= this.numericUD1.Value
                               && m.GiaBan.Value <= this.numericUD2.Value))
                               select m).ToList();
                this.mATHANGBindingSource.DataSource = mathang;
                this.mATHANGBindingSource.ResetBindings(true);
                return;
            }

            if (!this.checkBoxTenhang.Checked && this.checkBoxLoaihang.Checked && this.checkBoxSoluong.Checked && !this.checkBoxGiaBan.Checked)
            {                
                if (this.numericUDSL.Value <= 0)
                {
                    MessageBox.Show("Số lượng hàng chưa chọn", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                if (string.IsNullOrEmpty(this.comboBoxLH.Text))
                {
                    MessageBox.Show("Bạn chưa chọn loại hàng", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                var mathang = (from m in db.MATHANGs
                               where ((m.MaLoaiHang == this.comboBoxLH.Text) && m.SoLuongHienCo.Value <= this.numericUDSL.Value)
                               select m).ToList();
                this.mATHANGBindingSource.DataSource = mathang;
                this.mATHANGBindingSource.ResetBindings(true);
                return;
            }

            if (this.checkBoxTenhang.Checked && !this.checkBoxLoaihang.Checked && !this.checkBoxSoluong.Checked && this.checkBoxGiaBan.Checked)
            {
                if (string.IsNullOrEmpty(this.txtTenHang.Text))
                {
                    MessageBox.Show("Chưa nhập tên hàng", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                if (this.numericUD1.Value <= 0 && this.numericUD2.Value <= 0)
                {
                    MessageBox.Show("Bạn chưa chọn đơn giá hàng", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                 var mathang = (from m in db.MATHANGs
                                where ((m.TenHang.StartsWith(this.txtTenHang.Text)) && (m.GiaBan.Value >= this.numericUD1.Value && m.GiaBan.Value <= this.numericUD2.Value))
                               select m).ToList();
                this.mATHANGBindingSource.DataSource = mathang;
                this.mATHANGBindingSource.ResetBindings(true);
                return;
            }

            if (this.checkBoxTenhang.Checked && !this.checkBoxLoaihang.Checked && this.checkBoxSoluong.Checked && !this.checkBoxGiaBan.Checked)
            {
                if (string.IsNullOrEmpty(this.txtTenHang.Text))
                {
                    MessageBox.Show("Chưa nhập tên hàng", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                if (this.numericUDSL.Value <= 0)
                {
                    MessageBox.Show("Số lượng hàng chưa chọn", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                } 
                var mathang = (from m in db.MATHANGs
                               where ((m.TenHang.StartsWith(this.txtTenHang.Text)) && m.SoLuongHienCo.Value <= this.numericUDSL.Value)
                               select m).ToList();
                this.mATHANGBindingSource.DataSource = mathang;
                this.mATHANGBindingSource.ResetBindings(true);
                return;
            }

            if (this.checkBoxTenhang.Checked && this.checkBoxLoaihang.Checked && !this.checkBoxSoluong.Checked && !this.checkBoxGiaBan.Checked)
            {
                if (string.IsNullOrEmpty(this.txtTenHang.Text))
                {
                    MessageBox.Show("Chưa nhập tên hàng", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                if (string.IsNullOrEmpty(this.comboBoxLH.Text))
                {
                    MessageBox.Show("Bạn chưa chọn loại hàng", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                var mathang = (from m in db.MATHANGs
                               where ((m.TenHang.StartsWith(this.txtTenHang.Text)) && (m.MaLoaiHang == this.comboBoxLH.Text))
                               select m).ToList();
                this.mATHANGBindingSource.DataSource = mathang;
                this.mATHANGBindingSource.ResetBindings(true);
                return;
            }

            if (!this.checkBoxTenhang.Checked && !this.checkBoxLoaihang.Checked && !this.checkBoxSoluong.Checked && this.checkBoxGiaBan.Checked)
            {                
                if (this.numericUD1.Value <= 0 && this.numericUD2.Value <= 0)
                {
                    MessageBox.Show("Bạn chưa chọn đơn giá hàng", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                var mathang = (from m in db.MATHANGs
                               where m.GiaBan.Value >= this.numericUD1.Value && m.GiaBan.Value <= this.numericUD2.Value
                               select m).ToList();
                this.mATHANGBindingSource.DataSource = mathang;
                this.mATHANGBindingSource.ResetBindings(true);
                return;
            }

            if (!this.checkBoxTenhang.Checked && !this.checkBoxLoaihang.Checked && this.checkBoxSoluong.Checked && !this.checkBoxGiaBan.Checked)
            {              
                if (this.numericUDSL.Value <= 0)
                {
                    MessageBox.Show("Số lượng hàng chưa chọn", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                var mathang = (from m in db.MATHANGs
                               where m.SoLuongHienCo.Value <= this.numericUDSL.Value
                               select m).ToList();
                this.mATHANGBindingSource.DataSource = mathang;
                this.mATHANGBindingSource.ResetBindings(true);
                return;
            }
            if (!this.checkBoxTenhang.Checked && this.checkBoxLoaihang.Checked && !this.checkBoxSoluong.Checked && !this.checkBoxGiaBan.Checked)
            {
                if (string.IsNullOrEmpty(this.comboBoxLH.Text))
                {
                    MessageBox.Show("Bạn chưa chọn loại hàng", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                var mathang = (from m in db.MATHANGs
                               where m.MaLoaiHang == this.comboBoxLH.Text
                               select m).ToList();
                this.mATHANGBindingSource.DataSource = mathang;
                this.mATHANGBindingSource.ResetBindings(true);
                return;
            }

            if (this.checkBoxTenhang.Checked && !this.checkBoxLoaihang.Checked && !this.checkBoxSoluong.Checked && !this.checkBoxGiaBan.Checked)
            {
                if (string.IsNullOrEmpty(this.txtTenHang.Text))
                {
                    MessageBox.Show("Chưa nhập tên hàng", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
             
                var mathang = (from m in db.MATHANGs
                               where m.TenHang.StartsWith(this.txtTenHang.Text)
                               select m).ToList();
                this.mATHANGBindingSource.DataSource = mathang;
                this.mATHANGBindingSource.ResetBindings(true);
                return;
            }

            if (!this.checkBoxTenhang.Checked && !this.checkBoxLoaihang.Checked && !this.checkBoxSoluong.Checked && !this.checkBoxGiaBan.Checked)
            {               
                var mathang = (from m in db.MATHANGs
                               select m).ToList();
                this.mATHANGBindingSource.DataSource = mathang;
                this.mATHANGBindingSource.ResetBindings(true);
                return;
            }
        }

        private void btnThoatMH_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        public MATHANG MatHangSua = new MATHANG();
        private void btnSuaMH_Click(object sender, EventArgs e)
        {
            var mathang = this.mATHANGBindingSource.Current as MATHANG;
            if (mathang != null)
            {
                MatHangSua = mathang;
                var kq = new FormChiTietMatHang(MatHangSua, this).ShowDialog();
                if (kq == DialogResult.OK)
                {
                    mathang.TenHang = MatHangSua.TenHang;
                    mathang.MaDonViTinh = MatHangSua.MaDonViTinh;
                    mathang.MaLoaiHang = MatHangSua.MaLoaiHang;
                    mathang.SoLuongHienCo = MatHangSua.SoLuongHienCo.Value;
                    mathang.GiaBan = MatHangSua.GiaBan.Value;
                    mathang.GiaNhap = MatHangSua.GiaNhap.Value;

                    this.mATHANGBindingSource.ResetCurrentItem();
                    this.mATHANGBindingSource.ResetBindings(true);
                    MessageBox.Show("Đã cập nhật dữ liệu", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                }
            } 
        }

        private void FormTimKiemMatHang_Load(object sender, EventArgs e)
        {
            this.dataGridViewDSMH.AutoGenerateColumns = false;
            var mathang = (from m in db.MATHANGs
                           orderby m.MaHang ascending
                           select m
                               ).ToList();
            this.mATHANGBindingSource.DataSource = mathang;

            var lh = (from m in db.LOAIHANGs
                      select m).ToList();
            bsLoaiHang.DataSource = lh;
            this.comboBoxLH.DataSource = bsLoaiHang;
            this.comboBoxLH.DisplayMember = "MaLoaiHang";          
        }
        
        private void bsLoaiHang_CurrentChanged_1(object sender, EventArgs e)
        {
            var loaihang = this.bsLoaiHang.Current as LOAIHANG;
            if (loaihang != null)
            {
                var hang = (from m in db.MATHANGs
                            where m.MaLoaiHang == loaihang.MaLoaiHang
                            select m).ToList();
                this.mATHANGBindingSource.DataSource = hang;
            }
        }

        private void bsdonvitinh_CurrentChanged(object sender, EventArgs e)
        {
            var donvitinh = this.bsdonvitinh.Current as DONVITINH;
            if (donvitinh != null)
            {
                var dvt = (from m in db.MATHANGs
                            where m.MaDonViTinh == donvitinh.MaDonViTinh
                            select m).ToList();
                this.mATHANGBindingSource.DataSource = dvt;
            }
        }

        private void btnChon_Click(object sender, EventArgs e)
        {
            Form frmChonLoaiHang = new FormTimKiemLoaiHang(this);
            frmChonLoaiHang.ShowDialog();
        }

        private void btnXoaMH_Click(object sender, EventArgs e)
        {
            var mathang = this.mATHANGBindingSource.Current as MATHANG;
            if (mathang != null)
            {
                var chungtu = (from m in db.CHITIETCHUNGTUs
                               where m.MaHang == mathang.MaHang
                               select m).Count();
                if (chungtu > 0)
                {
                    MessageBox.Show("Mặt hàng này tồn tại trong chứng từ, không thể xóa");
                    return;
                }
                var phieunhap = (from m in db.CHITIETPHIEUNHAPs
                                 where m.MaHang == mathang.MaHang
                                 select m).Count();
                if (phieunhap > 0)
                {
                    MessageBox.Show("Mặt hàng này tồn tại trong phiếu nhập, không thể xóa");
                    return;
                }
                var tl = MessageBox.Show("Bạn chắc chắn xóa?", "Cảnh báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (tl == DialogResult.Yes)
                {
                    try
                    {
                        db.MATHANGs.DeleteOnSubmit(mathang);
                        db.SubmitChanges();
                        this.mATHANGBindingSource.RemoveCurrent();
                        MessageBox.Show("Xóa thành công!");
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Đã có lỗi khi thực hiện thao tác này : Chi tiết lỗi " + ex.Message);
                        return;
                    }
                }


            }
            else
            {
                MessageBox.Show("Chọn hàng cần xóa");

            }
        }    
    }
}
